package top.hmtools.common;

import java.util.LinkedList;

import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import top.hmtools.pojo.RequestLogBean;

/**
 * 用户请求日志记录扩展信息缓存队列（写入数据库之前）
 * <br>与 top.hmtools.common.RequestLogBeanQueue 其实一模一样，不过本队列是用于追加的日志扩展信息
 * @author Jianghaibo
 *
 */
@Component
@Scope("singleton")
@ConditionalOnProperty(prefix=StaticContent.CONFIG_PREFIX,value=StaticContent.CONFIG_ITEM_KEY_NAME_ENABLED,matchIfMissing=true)
public class RequestLogBeanExtraQueue {

    /**
     * 缓存队列
     */
    private static LinkedList<RequestLogBean> rlb_Queue = new LinkedList<RequestLogBean>();
    
    /**
     * 添加一个元素（用户请求日志记录信息）
     * * <br>线程安全
    * 方法说明：                    add
    * 输入参数说明：           @param requestLogBean
    * 输入参数说明：           @return
    * 输出参数说明：           boolean
    *
    *
     */
    public boolean add(RequestLogBean requestLogBean){
        synchronized (rlb_Queue) {
            return rlb_Queue.add(requestLogBean);
        }
    }
    
    /**
     * 获取当前队里元素总数
     * * <br>线程安全
    * 方法说明：                    getQueueSize
    * 输入参数说明：           @return
    * 输出参数说明：           int
    *
    *
     */
    public int getQueueSize(){
        synchronized (rlb_Queue) {
            return rlb_Queue.size();
        }
    }
    
    /**
     * 从队列中获取1个元素，并移除
     * <br>线程安全
    * 方法说明：                    poll
    * 输入参数说明：           @return
    * 输出参数说明：           RequestLogBean
    *
    *
     */
    public RequestLogBean poll(){
        synchronized (rlb_Queue) {
            return rlb_Queue.poll();
        }
    }
}
